<?php

class XQL_QuerySet
{
	/**
	 * Az adatbázis kapcsolat konfigurációs azonosítója.
	 * @access protected
	 * @var string
	 */
	protected $preset = 'default';
	
	/**
	 * Az adatbázis kapcsolat, amelyen a lekérések futtatása megtörténik.
	 * @access protected
	 * @var XQL_Connection
	 */
	protected $connection;

	/**
	 * A lekérésgyűjteményhez rendelt lekérés objektumokat tároló asszociatív
	 * tömb. A tömbben megadott elem azonosítók szolgálhatnak virtális metódusok
	 * elnevezéseként abban az esetben, ha az egyes metódusok közül néhány
	 * (vagy mind) nincsenek definiálva az adott osztályban. Használatuk
	 * a jobb hordozhatóság miatt ajánlott.
	 * @access protected
	 * @var array of XQL_Query
	 */
	protected $queries = array();

	/**
	 * Ha értéke TRUE, a futtatott lekérések az oldalbetöltés végén
	 * megjelennek.
	 * @var bool
	 */
	public $debug = FALSE;
	
	/**
	 * Konstruktor.
	 * A $preset paraméter alapján adatbázis kapcsolatot rendel a gyűjteményhez.
	 * A {@link $queries} tömb feltöltése ajánlott, hogy a konstruktorban
	 * történjen meg.
	 *
	 * @param string $preset Adatbáziskapcsolat álneve a rendszeren belül
	 * @access public
	 */
	public function __construct($preset='default')
	{
		$this->preset = $preset;
		$this->connection = XQL_Manager::getConnection($this->preset);
	}

	/**
	 * Beállítja a hibakeresés szükségességét a lekéréseken.
	 * Ha a hibakeresés be van kapcsolva, a lekérések az oldal betöltése után
	 * kiírásra fognak kerülni.
	 *
	 * @param bool $state
	 */
	public function debug($state=TRUE)
	{
		$this->debug = $state;
		foreach ($this->queries as $query)
		{
			$query->debug = $this->debug;
		}
	}

	/**
	 * Destruktor.
	 * Az objektum felszabadítása előtt felszabadítja az ahhoz tartozó
	 * lekéréseket.
	 *
	 * @access public
	 */
	public function __destruct( )
	{
		foreach ($this->queries as $id=>$query)
		{
			unset($this->queries[$id]);
		}
		unset($this->queries);
	}

	/**
	 * Visszatér a gyűjtemény lekérései által használt adatbázis kapcsolattal.
	 *
	 * @return XQL_Connection
	 */
	public function getConnection()
	{
		return $this->connection;
	}

	/**
	 * Visszatér a lekérések gyűjteménybeli azonosítónevével.
	 * Ha a metódus kapott prefix-et is, akkor a nevek elé teszi és így tér
	 * vissza.
	 *
	 * @param string $prefix
	 * @return array
	 */
	public function getQueryNames($prefix='')
	{
		$result = array();
		foreach (array_keys($this->queries) as $name)
		{
			$result[] = $prefix.$name;
		}
		return $result;
	}

	/**
	 * Virtuális tulajdonság kezelő.
	 * A kezelőhoz érkezett tulajdonságnévvel megegyező tömbazonosítóhoz
	 * társított lekérésobjektummal tér vissza. Amennyiben ilyen nevű
	 * tömbazonosító nem létezik {@link eModel} kivétel keletkezik.
	 *
	 * @param string $propertyName
	 * @return XQL_Query
	 */
	public function __get($propertyName)
	{
		if (!isset($this->queries[$propertyName]))
		{
			throw new XQL_E_QuerySet_PropertyNotExists($propertyName);
		}
		
		return $this->queries[$propertyName];
	}
}

?>